home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
LOGIC Apps
/
Logic-APPLE_II_APPS.iso
/
mac
/
LOGIC Apple II 5.25" Library - ProDOS
/
PRO002.dsk
/
SURVEY.bas
< prev
next >
Wrap
BASIC Source File
|
2012-02-16
|
7KB
|
266 lines
10 D$ = CHR$(4): PRINT D$;"PR#3"
20 TEXT
30 V = 1: GOSUB 40:V = 24: GOSUB 40: GOTO 60
40 VTAB (V): HTAB (1): FOR X = 1 TO 79: PRINT "_";: NEXT
50 RETURN
60 VTAB (5): HTAB (27)
70 PRINT "[ THIS PROGRAM IS FREEWARE ]"
80 PRINT : PRINT : HTAB (24)
90 PRINT "YOU ARE FREE TO DISTRIBUTE COPIES"
100 PRINT : HTAB (28)
110 PRINT "BUT YOU MAY NOT SELL THEM."
120 VTAB (18): HTAB (31)
130 PRINT "THE FREEWARE PROJECT"
140 PRINT : HTAB (31)
150 PRINT "WALDEN SOFTWARE, INC."
160 PRINT : HTAB (32)
170 PRINT "(C) 1984, P. LUTUS"
180 FOR PAUSE = 0 TO 2500: NEXT
190 D$ = CHR$(4)
200 HT = 1403
210 F = 57.29577951
220 PRINT D$;"PR#3"
230 DIM Q(40): DIM D(40): DIM M(40): DIM S(40): DIM L(40)
240 DIM Q$(4)
250 FOR X = 1 TO 4
260 READ Q$(X): NEXT
270 DATA "NE","SE","SW","NW"
280 TP = 1
290 TEXT : PRINT CHR$(12);
300 GOSUB 420: PRINT
310 PRINT "E)nter P)lot A)djust I)nsert D)elete C)hange N)ew L)oad S)ave Q)uit:";
320 GET L$
330 GOSUB 370
340 PRINT L$
350 GOSUB 540
360 GOTO 290
370 IF L$ = "" THEN RETURN
380 L = ASC(L$)
390 IF L >95 THEN L = L -32
400 L$ = CHR$(L)
410 RETURN
420 IF TP >1 THEN 440
430 PRINT "(no survey entries)": RETURN
440 PRINT "# Quadrant Degrees Minutes Seconds Feet"
450 PRINT
460 FOR X = 1 TO TP -1
470 PRINT X;
480 POKE HT,4: PRINT Q$(Q(X));
490 POKE HT,14: PRINT D(X);
500 POKE HT,23: PRINT M(X);
510 POKE HT,32: PRINT S(X);
520 POKE HT,41: PRINT L(X)
530 NEXT : RETURN
540 IF L$ < >"A" THEN PL = 0
550 IF L$ = "E" THEN 660
560 IF L$ = "I" THEN 1010
570 IF L$ = "D" THEN 1150
580 IF L$ = "C" THEN 1240
590 IF L$ = "S" THEN 1290
600 IF L$ = "L" THEN 1530
610 IF L$ = "Q" THEN 1800
620 IF L$ = "N" THEN 1870
630 IF L$ = "P" THEN 1910
640 IF L$ = "A" THEN 2470
650 RETURN
660 HOME : GOSUB 420
670 P = TP: GOSUB 700
680 IF V THEN TP = TP +1: GOTO 660
690 RETURN
700 V = 0
710 IF DL THEN 770
720 PRINT
730 PRINT "Entry ";P
740 PRINT
750 PRINT "Quadrant (NE,SE,SW,NW):";
760 H = PEEK(HT): PRINT Q$(Q(P));: POKE HT,H
770 GOSUB 980
780 IF L$ = "" THEN RETURN
790 X = 1
800 IF L$ = Q$(X) THEN 830
810 X = X +1: IF X <5 THEN 800
820 GOTO 740
830 Q(P) = X
840 Q$ = "Degrees:":Q = D(P): GOSUB 950
850 IF L$ = "" THEN RETURN
860 D(P) = VAL(L$)
870 Q$ = "Minutes:":Q = M(P): GOSUB 950
880 M(P) = VAL(L$)
890 Q$ = "Seconds:":Q = S(P): GOSUB 950
900 S(P) = VAL(L$)
910 Q$ = "Length in feet:":Q = L(P): GOSUB 950
920 IF L$ = "" THEN RETURN
930 L(P) = VAL(L$)
940 V = 1: RETURN
950 IF DL THEN 980
960 PRINT Q$;:H = PEEK(HT)
970 PRINT Q;: POKE HT,H
980 INPUT "";L$
990 IF RIGHT$(L$,1) = " " THEN L$ = LEFT$(L$,( LEN(L$) -1)): GOTO 990
1000 RETURN
1010 PRINT : INPUT "Insert Line:";L$
1020 IF L$ = "" THEN RETURN
1030 P = VAL(L$)
1040 IF P <1 OR P >TP THEN RETURN
1050 GOSUB 1090
1060 GOSUB 700
1070 IF NOT V THEN 1190
1080 RETURN
1090 REM BUMP UP
1100 FOR X = TP TO P STEP -1
1110 Y = X +1
1120 Q(Y) = Q(X):D(Y) = D(X):M(Y) = M(X)
1130 S(Y) = S(X):L(Y) = L(X)
1140 NEXT :TP = TP +1: RETURN
1150 PRINT : INPUT "Delete Line:";L$
1160 IF L$ = "" THEN RETURN
1170 P = VAL(L$)
1180 IF P <1 OR P >(TP -1) THEN RETURN
1190 FOR X = P TO TP
1200 Y = X +1
1210 Q(X) = Q(Y):D(X) = D(Y):M(X) = M(Y)
1220 S(X) = S(Y):L(X) = L(Y)
1230 NEXT :TP = TP -1: RETURN
1240 PRINT : INPUT "Change Line:";L$
1250 IF L$ = "" THEN RETURN
1260 P = VAL(L$)
1270 IF P <1 OR P >(TP -1) THEN RETURN
1280 GOTO 720
1290 IF TP <2 THEN RETURN
1300 PRINT
1310 PRINT "Enter Save File Name (?=Catalog):";
1320 H = PEEK(HT): PRINT F$;: POKE HT,H
1330 INPUT "";L$
1340 IF L$ = "" THEN RETURN
1350 IF L$ < >"?" THEN 1390
1360 HOME
1370 PRINT D$;"CATALOG"
1380 GOTO 1300
1390 PRINT
1400 F$ = L$
1410 PRINT D$;"OPEN";F$
1420 PRINT D$;"WRITE";F$
1430 FOR X = 1 TO TP -1
1440 PRINT Q$(Q(X))
1450 PRINT D(X)
1460 PRINT M(X)
1470 PRINT S(X)
1480 PRINT L(X)
1490 NEXT
1500 PRINT : PRINT
1510 PRINT D$;"CLOSE";F$
1520 RETURN
1530 PRINT
1540 IF TP <2 THEN 1590
1550 INPUT "Erases Existing Entries. OK (Y/N):";L$
1560 GOSUB 370
1570 IF L$ < >"Y" THEN RETURN
1580 PRINT
1590 PRINT "Enter Load File Name (?=Catalog):";
1600 H = PEEK(HT): PRINT F$;
1610 POKE HT,H
1620 INPUT "";L$
1630 IF L$ = "" THEN RETURN
1640 IF L$ < >"?" THEN 1680
1650 HOME
1660 PRINT D$;"CATALOG"
1670 GOTO 1590
1680 PRINT
1690 F$ = L$
1700 PRINT D$;"OPEN";F$
1710 PRINT D$;"READ";F$
1720 DL = 1
1730 P = 1
1740 GOSUB 700
1750 IF V = 0 THEN 1770
1760 P = P +1: GOTO 1740
1770 PRINT D$;"CLOSE";F$
1780 DL = 0
1790 TP = P: RETURN
1800 PRINT : INPUT "Quit (Y/N):";L$
1810 GOSUB 370
1820 IF L$ < >"Y" THEN RETURN
1830 INPUT "Save Entries (Y/N):";L$
1840 GOSUB 370
1850 IF L$ < >"N" THEN GOSUB 1290
1860 TEXT : HOME : PRINT CHR$(4)"-STARTUP"
1870 PRINT : INPUT "Erase Entries (Y/N):";L$
1880 GOSUB 370
1890 IF L$ = "Y" THEN TP = 1
1900 RETURN
1910 IF TP <2 THEN RETURN
1920 PL = 1
1930 XL = 0:XH = 0:YL = 0:YH = 0
1940 PF = 1: GOSUB 1970
1950 GOSUB 2330
1960 PF = 0
1970 XV = 0:YV = 0:PM = 0:OM = 0:PA = 0:OA = 0:AR = 0
1980 IF SP THEN GOSUB 2390
1990 FOR T = 1 TO TP -1
2000 RA = D(T) +(M(T)/60) +(S(T)/3600)
2010 IF Q(T) = 2 THEN RA = 180 -RA
2020 IF Q(T) = 3 THEN RA = 180 +RA
2030 IF Q(T) = 4 THEN RA = 360 -RA
2040 RA = RA/F
2050 X = L(T) *( SIN(RA)):Y = L(T) *( COS(RA))
2060 XV = XV +X:YV = YV +Y
2070 PM = SQR((XV *XV) +(YV *YV))
2080 IF YV = 0 THEN YV = 1E -30
2090 PA = ( ATN(XV/YV) *F)
2100 IF PA <0 THEN PA = 180 +PA
2110 IF XV <0 THEN PA = 180 +PA
2120 AR = AR +((PM *OM * SIN((OA -PA)/F))/2)
2130 OA = PA:OM = PM
2140 IF CR THEN RETURN
2150 IF PF THEN GOSUB 2280
2160 IF NOT PF THEN GOSUB 2390
2170 NEXT T
2180 IF PF THEN RETURN
2190 HOME : VTAB (21)
2200 PRINT "Closure Error: X=";XV;" Y=";YV
2210 A = ABS(AR)
2220 B = A/43560
2230 A = ( INT((A *100) +.5))/100
2240 B = ( INT((B *100) +.5))/100
2250 PRINT "Area ";A;" Sq. Ft. ";B;" Acres."
2260 INPUT "Small Square = Beginning Point (Press RETURN):";L$
2270 RETURN
2280 IF XH <XV THEN XH = XV
2290 IF XL >XV THEN XL = XV
2300 IF YH <YV THEN YH = YV
2310 IF YL >YV THEN YL = YV
2320 RETURN
2330 XF = (XH +XL)/2:YF = (YH +YL)/2
2340 XS = ABS(XH) + ABS(XL):YS = ABS(YH) + ABS(YL)
2350 SC = 150/YS
2360 IF XS >(YS *1.75) THEN SC = 270/XS
2370 HGR : HCOLOR= 3
2380 SP = 1: RETURN
2390 XP = 140 +((XV -XF) *SC):YP = 80 -((YV -YF) *SC)
2400 IF SP THEN 2430
2410 HPLOT TO XP,YP
2420 RETURN
2430 SP = 0
2440 HPLOT XP +3,YP +3 TO XP +3,YP -3 TO XP -3,YP -3 TO XP -3,YP +3 TO XP +3,YP +3
2450 HPLOT XP,YP
2460 RETURN
2470 PRINT : IF PL THEN 2500
2480 INPUT "You must (P)lot before (A)djusting (press RETURN):";L$
2490 RETURN
2500 INPUT "Adjust which line:";L$
2510 IF L$ = "" THEN RETURN
2520 T = VAL(L$)
2530 IF T <1 OR T >TP -1 THEN RETURN
2540 XV = -XV:YV = -YV
2550 CR = 1: GOSUB 2000
2560 CR = 0
2570 QI = 1 +( INT(PA/90))
2580 IF PA >180 THEN PA = 360 -PA
2590 IF PA >90 THEN PA = 180 -PA
2600 PA = PA +1.38889E -4
2610 PM = ( INT((PM *100) +.5))/100
2620 DI = INT(PA):MI = (PA -DI) *60
2630 SI = INT((MI -( INT(MI))) *60)
2640 MI = INT(MI)
2650 Q(T) = QI:D(T) = DI:M(T) = MI:S(T) = SI:L(T) = PM
2660 RETURN